package inner;

/**
 * @User: vitobo
 * @Date: 2024-05-20
 * @Description:
 */
// 内部类:
// 1.实例内部类/非静态内部类
// 2.静态内部类
// 3.局部内部类
// 4.匿名内部类

class OutClass{

    public int data1 = 1;
    public int data2 = 2;
    public static int data3 = 3;

    public void test(){
        InnerClass innerClass = new InnerClass();
        innerClass.func();

        System.out.println("OutClass::test()");
    }


    /**
     *  实例内部类
     *  1.如何获取实例内部类的对象
     *      OutClass.InnerClass innerClass = outClass.new InnerClass();
     *  2.实例内部类当中 不能有静态的成员变量； 非要定义，那么只能是static final来修饰的
     *
     *  3.在实例内部类当中，如何访问外部类当中相同的成员变量？
     *      在实例内部类当中 获取外部类的this OutClass.this.data1
     */

    // 实例内部类
    class InnerClass{
        public int data1 = 111;
        public int data4 = 4;
        int data5 = 5;
        // public static int data6;  //error
        public static final int data6 = 6;   // final 常量,

        public void func(){
            System.out.println("InnerClass::test()");

            // 定义为常量,常量是在程序编译的时候确定的,一旦初始化，就不能再进行修改。
            final int SIZE = 10;

            // 访问外部类中的同名变量
            System.out.println(OutClass.this.data1);
//            OutClass outClass = new OutClass();
//            System.out.println(outClass.data1);

            System.out.println(this.data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);

        }

    }

}

public class Test {

    public static void main(String[] args) {
        OutClass outClass = new OutClass();

        OutClass.InnerClass innerClass = outClass.new InnerClass();
        innerClass.func();

    }

}
